home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-08-21 | 1.8 KB | 93 lines | [TEXT/MACA] |
- ( Towers of hanoi in Mops )
- ( Aug. 90 jl )
- : hanoi-towers ; \ for easy forgetting
-
- :class tower super( ordered-col )
- rect base
- rect column
- int xcenter
- int ycenter
-
- :M classinit: ( xcenter ycenter -- ) put: ycenter put: xcenter
- get: xcenter 70 - get: ycenter 16 -
- get: xcenter 70 + get: ycenter put: base
- get: xcenter 4 - get: ycenter limit: self 10 * 50 + -
- get: xcenter 4 + get: ycenter 16 - put: column
- ;M
-
- :M draw: 0 syspat dup fill: base fill: column ;M
- :M getX: get: xcenter ;M
- :M getY: get: ycenter ;M
-
- ;class
-
- :class disk super( object )
- int size
- var which
- rect image
- int xc int yc
-
- :M classinit: ( which size -- )
- put: size put: which
- addr: self get: which add: ** ;M
-
- :M draw:
- get: which getX: ** put: xc
- get: which getY: **
- 12 - get: which size: ** 10 * - put: yc
- get: xc get: size - get: yc 4-
- get: xc get: size + get: yc 4+ put: image
- 3 syspat fill: image draw: image
- ;M
-
- :M undraw: 19 syspat fill: image
- get: xc 4- get: yc 4-
- get: xc 4+ get: yc 4+ put: image
- 0 syspat fill: image
- ;M
-
- :M move: { dest -- }
- undraw: self
- addr: self dest add: **
- get: which size: ** 1- get: which remove: **
- dest put: which
- draw: self
- ;M
-
- ;class
-
- 3 array towers
-
- handle tw
-
- : make.towers { ndisks -- }
- 3 0 do i 150 * 100 + 280 ndisks ['] tower newObj: tw
- obj: tw i to: towers loop ;
-
- : draw.towers
- 3 0 do i at: towers draw: ** loop ;
-
- : dispose.towers 3 0 do i at: towers dispose: ** loop ;
-
- : hanoi { n start inter finish -- }
- n if n 1- start finish inter hanoi
- finish at: towers start at: towers last: ** move: **
- n 1- inter start finish hanoi
- then
- ;
-
- : main { ndisks -- }
- ndisks make.towers cls draw.towers
- ndisks 0 do 0 at: towers 6 ndisks i - 4* + ['] disk newObj: tw drop
- 0 at: towers last: ** draw: ** loop
- ;
-
- : doit
- show: fwind select: fwind
- 10 main
- 10 0 1 2 hanoi
- ;
-
- : demo doit bye ;
-
-